#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+1;
const int M = 30;

struct Node{
    int l,r;
    Node():l{0},r{0}{}
};
Node root;
vector<Node> nodes;

int n;
int x,y,w;
vector<int> edges[N];
int wn[N];

void dfs(int fa,int cur){
    int t,w1;
    for(int i=0;i<edges[cur].size();i+=2){
        t = edges[cur][i];
        w1 = edges[cur][i+1];
        if(t==fa) continue;
        wn[t] = wn[cur]^w1;
        dfs(cur,t);
    }
}

void build(int w){
    int cur = 0;
    for(int i=(1<<M);i>0;i>>=1){
        if(w&i){
            if(nodes[cur].r){
                cur = nodes[cur].r;
            }else{
                nodes[cur].r = nodes.size();
                cur = nodes.size();
                nodes.emplace_back(Node{});
            }
        }else{
            if(nodes[cur].l){
                cur = nodes[cur].l;
            }else{
                nodes[cur].l = nodes.size();
                cur = nodes.size();
                nodes.emplace_back(Node{});
            }        
        }
    }
}

inline int query(int w){
    int ans = 0;
    int cur = 0;
    for(int i=(1<<M);i>0;i>>=1){
        if(w&i){
            if(nodes[cur].l){
                ans += i;
                cur = nodes[cur].l;
            }else{
                cur = nodes[cur].r;
            }
        }else{
            if(nodes[cur].r){
                ans += i;
                cur = nodes[cur].r;
            }else{
                cur = nodes[cur].l;
            }        
        }
    }
    return ans;
}

int main(){
    scanf("%d",&n);
    for(int i=1;i<n;i++){
        scanf("%d%d%d",&x,&y,&w);
        edges[x].emplace_back(y);
        edges[x].emplace_back(w);
        edges[y].emplace_back(x);
        edges[y].emplace_back(w);
    }
    memset(wn,0,sizeof(wn));
    dfs(-1,1);
    // for(int i=1;i<=n;i++) cout<<i<<' '<<wn[i]<<endl;
    /*
        4
        1 2 3
        2 3 4
        2 4 6
    */
    nodes.emplace_back(root);
    for(int i=1;i<=n;i++) build(wn[i]);
    int ans = 0;
    for(int i=1;i<=n;i++) {
        // cout<<"----"<<i<<":"<<query(wn[i])<<'\n';
        ans = max(ans,query(wn[i]));
    }

    // for(int i=0;i<nodes.size();i++){
    //     cout<<i<<' '<<nodes[i].l<<' '<<nodes[i].r<<endl;
    // }
    cout<<ans<<endl;
    return 0;
}